1. Field of the Invention
The present invention relates to a host channel adapter configured for communication with target channel adapters in an InfiniBand™ server system.
2. Background Art
Networking technology has encountered improvements in server architectures and design with a goal toward providing servers that are more robust and reliable in mission critical networking applications. In particular, the use of servers for responding to client requests has resulted in a necessity that servers have an extremely high reliability to ensure that the network remains operable. Hence, there has been a substantial concern about server reliability, availability, and serviceability.
In addition, processors used in servers have encountered substantial improvements, where the microprocessor speed and bandwidth have exceeded the capacity of the connected input/output (I/O) buses, limiting the server throughput to the bus capacity. Accordingly, different server standards have been proposed in an attempt to improve server performance in terms of addressing, processor clustering, and high-speed I/O.
These different proposed server standards led to the development of the InfiniBand™ Architecture Specification, (Release 1.0), adopted by the InfiniBand™ Trade Association. The InfiniBand™ Architecture Specification specifies a high-speed networking connection between end nodes (e.g., central processing units, peripherals, etc.) and switches inside a server system. Hence, the term “InfiniBand™ network” refers to a private system area network (SAN) that connects end nodes and switches into a cluster within a server system, enabling the sharing of cluster resources. The InfiniBand™ Architecture Specification specifies both I/O operations and interprocessor communications (IPC).
A particular feature of InfiniBand™ Architecture Specification is the proposed implementation in hardware of the transport layer services present in existing networking protocols, such as TCP/IP based protocols. The hardware-based implementation of transport layer services provides the advantage of reducing processing requirements of the central processing unit (i.e., “offloading” processor code execution), hence offloading the operating system of the server system.
However, arbitrary hardware implementations may result in substantially costly or relatively inefficient hardware designs. The InfiniBand™ Architecture Specification requires that a packet sent via an HCA undergoes transport layer service, followed by link layer service, based on creation of a work queue entry in system memory by an executable verbs consumer resource. Examples of operations performed during transport layer service (performed, for example, by a transport layer module) include constructing a transport layer header, generating a packet sequence number, validating service type, etc., based on detecting a work notification of the work queue entry created in the system memory. Examples of operations performed during link layer service (performed, for example, by a link layer module) include service layer and virtual lane mapping (SL-VL mapping), link layer flow control packet generation, link layer transmission credit checking, etc.
Typically the transport layer module would service work queue entries by sequential processing of the respective work notifications, using a first in first out arrangement. However, the link layer operations within the HCA are configured for transmitting InfiniBand™ packets according to virtual lane prioritization. Hence, instances may arise where the transport layer module may service work notifications for work queue entries associated with a virtual lane having a relatively low priority.
Consequently, transport layer resources and link layer resources within the channel adapter are not coordinated relative to the link layer prioritization, resulting in inefficient utilization of resources. In particular, if the transport layer module stores transmit packets in a first-in first-out (FIFO) memory for subsequent processing by the link layer module, then the link layer module would need to retrieve the transmit packets according to their assigned virtual lane, requiring the link layer module to parse each transmit packet in the FIFO memory, and determine the corresponding assigned virtual lane to determine if the assigned virtual lane matched the current virtual lane being serviced by the link layer. The link layer module would need to repeat the FIFO memory search for each new packet, and each time the link layer module began servicing another virtual lane. Hence, the resource-intensive process of searching through the FIFO memory for transmit packets having matching assigned virtual lanes can substantially increase the complexity of the link layer module, increasing difficulties in the ability to guarantee that a quality of service level can be maintained.